/*
 * @brief: 
 * @Author: TzzzT
 * @Date: 2022-11-12 15:49:37
 * @LastEditTime: 2023-03-20 02:38:37
 * @LastEditors: TzzzT
 */

#include <string.h>
#include<stdlib.h>
#include<stdint.h>
#include <stdbool.h>
#include "esp_log.h"

int sunday(const char *haystack, const char *needle)
{
  int n = strlen(haystack), m = strlen(needle);
  if (m == 0) {
    return 0;
  }
  int pi[m];
  pi[0] = 0;
  for (int i = 1, j = 0; i < m; i++) {
    while (j > 0 && needle[i] != needle[j]) {
      j = pi[j - 1];
    }
    if (needle[i] == needle[j]) {
      j++;
    }
    pi[i] = j;
  }
  for (int i = 0, j = 0; i < n; i++) {
    while (j > 0 && haystack[i] != needle[j]) {
      j = pi[j - 1];
    }
    if (haystack[i] == needle[j]) {
      j++;
    }
    if (j == m) {
      return i - m + 1;
    }
  }
  return -1;
}


/** Baoli jiefa*/

// int sunday(const char *haystack, const char *needle){
//   int n = strlen(haystack), m = strlen(needle);
//   ESP_LOGE("sunday", "hay len:%d, needle:%d",n, m);
//   // esp_log_buffer_char("", haystack, n);
//   for (int i = 0; i + m <= n; i++) {
    
//     bool flag = true;
//     for (int j = 0; j < m; j++) {
//       // ESP_LOGE("", "i:%d j:%d, haystack[i + j]:%c",i, j, haystack[i + j]);
//         if (haystack[i + j] != needle[j]) {
//             flag = false;
//             break;
//         }
//     }
//     if (flag) {
//         return i;
//     }
//   }
//   return -1;
// }
